export default class AsyncQueue {
  queue: any[];
  isProcessing: boolean;
  constructor() {
      this.queue = [];
      this.isProcessing = false;
  }

  // 添加任务
  enqueue(task:any) {
      return new Promise((resolve, reject) => {
          this.queue.push({ task, resolve, reject });
          this.process();
      });
  }

  // 处理任务
  async process() {
      if (this.isProcessing || this.queue.length === 0) return;
      this.isProcessing = true;

      const { task, resolve, reject } = this.queue.shift();
      try {
          const result = await task();
          resolve(result);
      } catch (error) {
          reject(error);
      } finally {
          this.isProcessing = false;
          this.process(); // 继续处理下一个任务
      }
  }
}

// 使用示例
export const asyncQueue = new AsyncQueue();


function delay(ms, value) {
  return new Promise((resolve) => setTimeout(() => resolve(value), ms));
}

asyncQueue.enqueue(() => delay(1000, "任务 1 完成")).then(console.log);
asyncQueue.enqueue(() => delay(500, "任务 2 完成")).then(console.log);
asyncQueue.enqueue(() => delay(300, "任务 3 完成")).then(console.log);

// 输出:
// 任务 1 完成 (1 秒后)
// 任务 2 完成 (1.5 秒后)
// 任务 3 完成 (1.8 秒后)